#ifndef ICHATLOG_H_
#define ICHATLOG_H_

#include <wx/string.h>
#include <wx/datetime.h>
#include "../../../core/Buddy.h"
#include "../../../core/events/MessageCallbackEvent.h"
#include "../../../core/interfaces/iModule.h"

namespace Impp
{

#define MODULE_INTERFACE_CHATLOG 	wxT("iChatLogFactory")


class iChatLog
{

public:
	iChatLog(){};
	virtual ~iChatLog(){};

	virtual void writeStatusMessage(const Status & newStatus, const wxString & statusMsg) = 0;
	virtual void writeMessage(const wxDateTime & time, Buddy* sender,const wxString & msg, bool in, bool isHistory, const ActionId & id = -1) = 0;
	virtual void markMessage(MessageCallbackEvent event) = 0;
	virtual void scrollToEnd() = 0;
	virtual void clear() = 0;
	virtual wxWindow* getWindow() = 0;
	virtual void freeze() = 0;
	virtual void thaw() = 0;
};

class iChatLogFactory : public iModule{

	DECLARE_ABSTRACT_CLASS(iChatLogFactory)

public:
	iChatLogFactory(){};
	virtual ~iChatLogFactory(){};

	virtual void moduleInit(){};
	virtual void moduleDestroy(){};

	virtual iChatLog* newChatLog(Buddy* buddy, wxWindow* parent, int id) = 0;
};

}


#endif /*ICHATLOG_H_*/
